﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DisplayBoardInfoClient
{
    /// <summary>
    /// Klasa przechowujaca informacje o wizytach pacjentów. 
    /// </summary>
    public class PatientVisit
    {
        /// <summary>
        /// Typ zwracanej reprezentacji tekstowej. W obecnej wersji zaimplementowano typ reception.
        /// </summary>
        public enum ToStringType { Reception, Display, Doctor };
        /// <summary>
        /// Tworzy obiekt wizyty zapisując wszystkie przekazane dane jako pola.
        /// </summary>
        /// <param name="dateTime">Godzina i data wizyty</param>
        /// <param name="name">imię pacjenta</param>
        /// <param name="surname">nazwisko pacjenta</param>
        /// <param name="PESEL">PESEL pacjenta</param>
        /// <param name="duration">czas trwania wizyty</param>
        /// <param name="id">identyfikator pacjenta w bazie danych</param>
        public PatientVisit(DateTime dateTime, string name, string surname, string PESEL, int duration, string id)
        {
            this.VisitTime = dateTime;
            Patient = new PatientList.Patient(name, surname, PESEL, id);
            this.Duration = new TimeSpan(0, duration, 0);
        }
        /// <summary>
        /// Tworzy obiekt wizyty zapisując wszystkie przekazane dane jako pola.
        /// </summary>
        /// <param name="dateTime">Godzina i data wizyty</param>
        /// <param name="name">imię pacjenta</param>
        /// <param name="surname">nazwisko pacjenta</param>
        /// <param name="PESEL">PESEL pacjenta</param>
        /// <param name="duration">czas trwania wizyty</param>
        /// <param name="id">identyfikator pacjenta w bazie danych</param>
        /// /// <param name="visitID">identyfikator wizyty w bazie danych</param>
        public PatientVisit(DateTime dateTime, string name, string surname, string PESEL, int duration,string id, string visitID)
        {
            this.VisitTime = dateTime;
            Patient = new PatientList.Patient(name, surname, PESEL,id);
            this.Duration = new TimeSpan(0, duration, 0);
            ID = visitID;
        }
        /// <summary>
        /// Identyfikator wizyty w bazie danych
        /// </summary>
        public string ID { get; private set; }
        /// <summary>
        /// Obiekt zawierający informacje o pacjencie
        /// </summary>
        public PatientList.Patient Patient { get; private set; }
        /// <summary>
        /// Godzina i data wizyty
        /// </summary>
        public DateTime VisitTime { get; private set; }
        /// <summary>
        /// Długość wiyty w minutach
        /// </summary>
        public TimeSpan Duration{get;private set;}
        /// <summary>
        /// Przechowuje informacje czy zakończenie wizyty odbyło się poza kolejnością.
        /// </summary>
        public bool outOfQueue = false;
        [Obsolete]
        public void delay(TimeSpan time)
        {
            VisitTime.Add( time);
        }
        /// <summary>
        /// Zwraca reprezentację tekstową obiektu w jednym z podanych typów.
        /// </summary>
        /// <param name="type">typ zwróconej reprezentacji</param>
        /// <returns>Obiekt w postaci tekstu prezentującego zawartość odpowiednich pól.</returns>
        public string ToString(ToStringType type)
        {
            switch(type){
                case ToStringType.Reception:{
                    return VisitTime.Hour.ToString("00") + ":" + VisitTime.Minute.ToString("00") + " " + Patient.Name + " " + Patient.Surname + " " + Patient.PESEL;
                }
            }
            return "";
        }
        /// <summary>
        /// Zwraca godzinę wizyty w formacie HH:mm
        /// </summary>
        /// <returns>odpowiednio sformatowana godzina wizyty</returns>
        public string getHour()
        {
            return VisitTime.Hour.ToString("00") + ":" + VisitTime.Minute.ToString("00");
        }

    }
}
